// const OSS = require('ali-oss')
import OSS from "ali-oss";

const alioss = {
  endpoint: process.env.VUE_APP_OSS_ENDPOINT,
  accessKeyId: process.env.VUE_APP_OSS_ID,
  accessKeySecret: process.env.VUE_APP_OSS_SECRET,
  bucket: process.env.VUE_APP_OSS_BUCKET,
  dir: process.env.VUE_APP_OSS_DIR,
  // 
  client: function() {
    const client = new OSS({
      endpoint: process.env.VUE_APP_OSS_ENDPOINT,//Bucket所在地域
      accessKeyId: process.env.VUE_APP_OSS_ID,
      accessKeySecret: process.env.VUE_APP_OSS_SECRET,
      bucket: process.env.VUE_APP_OSS_BUCKET, // Bucket名称
      secure: true, // 是否开启HTTPS
    });
    return client
  },

  header: function() {
    const header = {
      // // 指定该Object被下载时网页的缓存行为。
      // 'Cache-Control': 'no-cache',
      // // 指定该Object被下载时的名称。
      // 'Content-Disposition': 'oss_download.txt',
      // // 指定该Object被下载时的内容编码格式。
      // 'Content-Encoding': 'UTF-8',
      // // 指定过期时间。
      // 'Expires': 'Wed, 08 Jul 2022 16:57:01 GMT',
      // // 指定Object的存储类型。
      // 'x-oss-storage-class': 'Standard',
      // // 指定Object的访问权限。
      // 'x-oss-object-acl': 'private',
      // // 设置Object的标签，可同时设置多个标签。
      // 'x-oss-tagging': 'Tag1=1&Tag2=2',
      // // 指定CopyObject操作时是否覆盖同名目标Object。此处设置为true，表示禁止覆盖同名Object。
      // 'x-oss-forbid-overwrite': 'true',
    }
    return header
  },

  // 生成文件随机名称
  getFileRandomName: function() {
    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
      var r = Math.random() * 16 | 0,
          v = c == 'x' ? r : (r & 0x3 | 0x8);
      return v.toString(16);
    })
  },

  /**
   * 简单上传
   * @param { Blob } file 二进制文件流
   * @param { String } saveDir 文件存储路径
   * @param { String } resType 返回结果类型
   * @param { String } name 文件名称
   */
  async put(file, saveDir, name) {
    if(file) {
      // 使用随机文件名称 + 后缀
      let suffix = file.name ? file.name.substring(file.name.lastIndexOf('.') + 1).toLocaleLowerCase() : '';
      let fileName = name ? name : this.getFileRandomName() + (suffix ? '.' + suffix : '');
      let header = this.header();
      let url = process.env.VUE_APP_OSS_DIR + (saveDir ? saveDir + '/' : '') + fileName;
      try {
        const result = await this.client().put( url, file, { header } )
        // 统一返回文件路径
        var filePath = result.name;
        return filePath;
      } catch(error) {
        console.log('ali-oss upload error: ', error);
        var reError = {
          errorCode: error.code || 'error',
          errorMessage: error.message,
        }
        return reError
      }
    } else {
      // 没有文件时返回
      let reError = {
        errorCode: 'noValidFile',
        errorMessage: '无有效文件',
      }
      return reError
    }
  },
}

export default alioss;
